#include <bits/stdc++.h>
using namespace std;
int ask(int c,int d){
    cout <<"? "<<c <<" "<<d << endl;
    int ans;
    cin >> ans;
    return ans;
}
int main(void){
    fflush(stdout);
    int a=0,b=0;
    //big是上一位(这里就是30位)的大小比较
    int big=ask(0,0);
    for(int i=29;i>=0;i--){
        //分别通过询问改变a和b的第i位
        //如果i位是1 1 返回值为-1 1
        //如果i位是0 0 返回值为1 -1
        int f=ask(a^(1<<i),b),s=ask(a,b^(1<<i));
        //相同说明这一位
        if(f==s){
            //a大于b
            if(big==1){
                a^=(1<<i);
            }else{
                b^=(1<<i);
            }
            big=f;
        }else if(f==-1){
            //a和b这一位都是1
            a+=(1<<i);
            b+=(1<<i);
        }
    }
    cout << "! "<<a <<" "<<b<<endl;
    return 0;
}